#include <iostream>
using namespace std;

// 继承中的同名静态成员处理方式

class Base
{
public:
    static int a;
    static void func()
    {
        cout << "Base - static void func()" << endl;
    }

    static void func(int b)
    {
        cout << "Base - static void func(int b)" << endl;
    }
};
int Base::a = 100;

class Son:public Base
{
public:
    static int a;
    static void func()
    {
        cout << "Son - static void func()" << endl;
    }
};
int Son::a = 999;

//同名静态的成员属性
void test1()
{
    // 1、通过对象访问
    Son s;
    cout << "通过对象访问：" << endl;
    cout << "Son下 a = " << s.a << endl;
    cout << "Base下 a = " << s.Base::a << endl;

    // 2、通过类名访问
    cout << "通过类名访问：" << endl;
    cout << "Son下 a = " << Son::a << endl;
    // 第一个::代表通过类名的方式访问    第二个::代表访问父类作用域下
    cout << "Base下 a = " << Son::Base::a << endl;
}

// 同名静态的成员函数
void test2()
{
    //1、通过对象访问
    cout << "通过对象访问：" << endl;
    Son s;
    s.func();
    s.Base::func();

    //2、通过类名访问
    cout << "通过类名访问：" << endl;
    Son::func();
    Son::Base::func();

    //子类重写 父类中重载的静态函数的 其中一个版本 -- 会隐藏父类中其他的同名成员函数
    //要加作用域，方可访问 父类中被隐藏的同名成员
    //error: Son::func(100);
    Son::Base::func(200);

}

int main()
{
    test1();
    cout << "------------------------" << endl;
    test2();
    
    return 0;
}